import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

export default new Vuex.Store({
	state: {
		count: 0
	},
	/**
	 * 用于变更state中的数据, 不能在mutation 函数中执行异步操作
	 */
	mutations: {

		addCount(state) {
			state.count++;
		},

		// 可接收参数
		addN(state, step) {
			state.count += step;
		},

		/* 减法运算 */
		subCount(state) {
			state.count--;
		},

		// 接收参数
		subN(state, step) {
			state.count -= step;
		}


	},
	// Action 用于处理异步操作,
	// 在action 中还是要通过触发Mutation的方式间接变更数据
	actions: {
		addAsync(context) {
			setTimeout(() => {
        context.commit('addCount');
			}, 3000);
		},

		/**
		 * 携带参数
		 * @param context
		 * @param step
		 */
		addNAsync(context, step) {
			setTimeout(() => {
				context.commit('addN', step);
			}, 3000);
		},

		subAsync(context) {
			setTimeout(() => {
				context.commit('subCount')
			}, 3000);
		},

		subNAsync(context, step) {
			setTimeout(() => {
				context.commit('subN', step);
			}, 3000);
		},

	},
	/*actions 结束*/

	/* getters 用于对store中的数据进行加工处理形成新的数据 */
	getters: {
		showNum(state) {
			return "当前最新的数量的10倍是 [ " + state.count * 10 + " ]";
		}
	},

	modules: {}
});
